package com.sky.properties;

import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**
 * 阿里支付配置属性类
 *
 * 该类通过Spring的@Component注解声明为一个Bean，允许Spring自动管理该实例。
 * @ConfigurationProperties(prefix = "sky.alipay")注解指示Spring Boot从配置文件中读取
 * 前缀为"sky.alipay"的属性，并将它们绑定到此类的相应字段上。
 * @Data注解来自Lombok库，提供了getter/setter、equals、hashCode、toString等方法的自动生成。
 *
 * 属性包括但不限于：
 * - 支付宝服务URL
 * - 应用ID(app_id)
 * - 应用私钥(app_private_key)
 * - 数据格式(format)
 * - 字符集(charset)
 * - 支付宝公钥(alipay_public_key)
 * - 签名类型(sign_type)
 * - 支付完成跳转地址(return_url)
 * - 服务器异步通知地址(notify_url)
 *
 * 使用方式：在需要使用支付宝配置的地方，通过@Autowired注入此Bean即可访问所有配置属性。
 */
@Component
@ConfigurationProperties(prefix = "sky.alipay")
@Data
public class AliPayProperties {
    private String app_id; // 应用ID
    private String app_private_key; // 应用私钥
    private String alipay_public_key; // 支付宝公钥
    private String return_url; // 支付完成后的跳转地址
    private String notify_url; // 服务器异步通知地址
    private String format; // 请求数据格式
    private String charset; // 字符集
    private String sign_type; // 签名类型
    private String geteway_url; // 支付宝网关地址

    @PostConstruct
    public void init() {
        // 设置参数（全局只需设置一次）
        Config config = new Config();
        config.protocol = "https";
        config.gatewayHost = "openapi.alipaydev.com";
        config.signType = "RSA2";
        config.appId = this.app_id;
        config.merchantPrivateKey = this.app_private_key;
        config.alipayPublicKey = this.app_private_key;
        config.notifyUrl = this.notify_url;
        Factory.setOptions(config);
        System.out.println("=======支付宝SDK初始化成功=======");
    }
}
